package com.zhang.controller.goods;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhang.common.dto.SkuSearchDto;
import com.zhang.common.util.result.R;
import com.zhang.common.util.result.RUtils;
import com.zhang.discount.service.FlashSaleSkuService;
import com.zhang.discount.vo.FlashSaleSkuInfoVO;
import com.zhang.goods.dto.SkuInfoDto;
import com.zhang.goods.entity.SpuInfo;
import com.zhang.goods.service.IGoodsService;
import com.zhang.goods.dto.GoodsSaveDto;
import com.zhang.goods.dto.SpuSearchDto;
import com.zhang.goods.vo.ConfirmOrderSkuVo;
import com.zhang.goods.vo.SkuItemVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/goods/")
@Slf4j
public class GoodsController {
    @Autowired
    IGoodsService goodsService;
    @Autowired
    private FlashSaleSkuService flashSaleSkuService;

    @PostMapping("save")
    public R goodsSave(@RequestBody GoodsSaveDto goodsSaveDto) {
        try {
            return goodsService.goodsSave(goodsSaveDto);
        } catch (Exception e) {
            log.error("保存失败", e);
            return RUtils.err("保存失败");
        }
    }

//    spu操作


    /**
     * 商品上架
     *
     * @param spuId
     * @return {@link R}
     */
    @PostMapping("up")
    public R goodsUp(@RequestParam Long spuId) {
        return goodsService.goodsUp(spuId);
    }

    /**
     * 获取我的spu列表(商家管理处)
     *
     * @param pageNum
     * @param pageSize
     * @param spuSearchDto
     * @return {@link R}
     */
    @GetMapping("get/spu/list/{pageNum}/{pageSize}")
    public R getMySpuList(@PathVariable Integer pageNum, @PathVariable Integer pageSize, SpuSearchDto spuSearchDto) {
        /*实体类不能使用@RequestParam注解，否则为null*/
        Page<SpuInfo> list = goodsService.getMySpuList(pageNum, pageSize, spuSearchDto);
        return RUtils.successData(list);
    }

    @GetMapping("get/spuAtlas/list/{spuId}")
    public R getSpuAlatsInfo(@PathVariable Long spuId) {
        List list = goodsService.getSpuAtlasInfo(spuId);
        return RUtils.successData(list);
    }

    /*sku操作*/
    @GetMapping("get/sku/page")
    public R getSkuList(SkuSearchDto skuSearchDto) {
        IPage list = goodsService.getSkuList(skuSearchDto);
        return RUtils.successData(list);
    }

    /**
     * 查询sku详情
     *
     * @param skuId
     * @return {@link R}
     */
    @GetMapping("get/skuItem/{skuId}")
    public R getSkuItem(@PathVariable Long skuId) {
        SkuItemVo skuItemVo = goodsService.getSkuItem(skuId);
        return RUtils.successData(skuItemVo);
    }

    /**
     * 获取确认订单详情部分
     *
     * @param skuIds
     * @return {@link R}
     */
    @PostMapping("get/OrderConfirmSkuInfo")
    public R getOrderConfirmSkuInfo(@RequestBody List<Long> skuIds) {
        List<ConfirmOrderSkuVo> vo = goodsService.getOrderConfirmSkuInfo(skuIds);
//     查询这个商品是否处于秒杀状态如果是，那么将价格替换
        for (ConfirmOrderSkuVo confirmOrderSkuVo : vo) {
            FlashSaleSkuInfoVO flashSkuBySkuId = flashSaleSkuService.getFlashSkuBySkuId(confirmOrderSkuVo.getSkuId().toString());
            if (flashSkuBySkuId != null) {
                if (!StrUtil.isEmpty(flashSkuBySkuId.getToken())) {
                    confirmOrderSkuVo.setPrice(flashSkuBySkuId.getPrice());
                }
            }
        }
        return RUtils.successData(vo);
    }

    @PutMapping("modify/sku")
    public R modify(@RequestBody SkuInfoDto skuInfoDto) {
        goodsService.modifySku(skuInfoDto);
        return RUtils.successMsg("修改成功");
    }
}
